package com.reload.stream;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Stream;

/**
 * @Date: 2024/4/24 下午4:22
 * @Version: 17
 * @Author: Reloading
 * @Description: 关于StreamApi
 */
public class StreamDemo {
    /*
    声明式处理集合数据，包括：筛选、转换、组合等
    创建流 --> 中间操作 --> 终止操作
     */
    private static String[] buffer = new String[1];
    private static List<Integer> list = List.of(1, 2, 3, 4, -2, 6, 7, 8, 9);

    public static void main(String[] args) {
        // 1、挑出最大偶数
        // for循环，挨个遍历找到偶数，temp = i; 下次找到的偶数和临时遍历比较
        int max = 0;
        for (Integer integer : list) {
            if (integer % 2 == 0) {
                // 是偶数，和max进行比较交换
                max = integer >= max ? integer : max;
            }
        }
        System.out.println("最大偶数：" + max);


        useStream();
    }

    public static void useStream() {
        /*
        流的特性
        1.流式lazy的，不用方法就不会被调用
        2.把数据封装成流，要得到数据流： 集合类.stream()
        3.定义流式操作
        4.获取最终结果
         */
        list.stream()
                // 过滤出想要的值 返回true就是想要的
                //  intermediate operation.
                .filter(ele -> {
                    System.out.println("正在filter：" + ele);
                    return ele % 2 == 0;
                })
                // This is a terminal operation.
                .max(Integer::compareTo)
                .ifPresent(System.out::println);

        // 流的三大部 数据流  N个中间操作  一个终止操作
        // 创建流
        Stream<Integer> stream = Stream.of(1, 2, 3);
        Stream<Integer> concat = Stream.concat(Stream.of(2, 3, 4), stream);
        Stream<Object> build = Stream.builder().add("11").add("22").build();
        // 从集合容器中获取这个流，List、Set、Map
        List<Integer> integers = List.of(1, 2);
        Stream<Integer> stream1 = integers.stream();
        Set<Integer> integers1 = Set.of(1, 2);
        integers1.stream();
        Map<Object, Object> of = Map.of();
        of.keySet().stream();
        of.values().stream();
        System.out.println("useStream：" + Thread.currentThread());
    }
}
